用 Git 同步 Hexo 博客文章
最近一直在想,有什么顺手的方式,能让我用 VScode 一把梭写博客,只有这样才会有顺手的感觉,不然太麻烦了就很不想写。想来想去,能不能用 Git 来同步文章呢,比如把服务器的 hexo 文章源文件夹作为远程仓库,查了一下确实是可行的,那就开始搞吧。
本地配置
分两个部分,一个是本地需要配置的,一个是远程服务器需要配置的。
配置 ssh 密钥
首先需要配置一下 ssh 密钥,后面配置远程服务器的时候会用到。
ssh-keygen -t rsa -C "youremail@example.com"
生成的 ssh 密钥会在 C:\Users\yourname\.ssh\
中,里面的文件至少有这两个:
.ssh
|--id_rsa
|--id_rsa.pub
然后本地暂时就没有什么可以配置的地方了,先去配置远程服务器吧。
克隆远程仓库
当远程空仓库创建以后,就可以通过 git clone
命令克隆了:
git clone git@server:/source/_posts.git
后面的用法和普通的 Git 仓库就是一样的了。
远程服务器配置
安装 Git
sudo apt install git
配置 Git 用户
先创建一个 Git 用户用于后面的登陆或管理。
sudo adduser git
然后配置证书登陆,这里要用到前面创建的公钥,在 C:\Users\yourname\.ssh\
中找到 id_rsa.pub
文件,将里面的公钥导入到 /home/git/.ssh/authorized_keys
文件里,保持一行一个公钥。
初始化需要的 Git 仓库
选定一个目录作为 Git 仓库,假定是 Hexo 的文章源文件夹 /source/_posts.git
,在 /source
目录下输入命令:
sudo git init --bare _posts.git
然后 Git 会创建一个裸仓库,进入裸仓库中 cd _posts.git
找到 hooks
文件夹进行以下步骤:
# 创建 post-receive 文件
sudo vim post-receive
# 在文件中输入以下内容
#!/bin/bash
git --work-tree=/source/_posts checkout -f
git --work-tree=/source/_posts clean -fd
# 保存退出后,设置权限
sudo chown git:git post-receive
sudo chmod +x post-receive
通过这样的配置,Git 仓库的内容就和设定的 --work-tree
文件夹进行了连接。